package com.fanshuai.tree.unionfind;

/**
 * 并查集规范
 */
public interface IUnionFind {
    /**
     * p与q之间是否连通
     * @param p
     * @param q
     * @return
     */
    boolean isConnected(int p, int q);

    /**
     * 连通2个元素
     * @param p
     * @param q
     */
    void unionElements(int p, int q);

    /**
     * 元素总个数
     * @return
     */
    int size();

    /**
     * 元素所属集合树的根节点
     * @param p
     * @return
     */
    int find(int p);

    /**
     * 当前元素所属集合的元素个数
     * @return
     */
    int componentSize(int p);

    /**
     * 并查集中不相交的集合个数
     * @return
     */
    int components();
}
